/////////////////////////////// 
// Analizador sintáctico 
/////////////////////////////// 
header{
	package PracticasPL.Practica3;
}


class Anasint extends Parser; 

options{
	importVocab=Analex;
	defaultErrorHandler = false;
}

entrada : (asignacion | var_usuario | condicion | bucle_for | mientras)* EOF;
entrada_tec : (asignac_tec | var_usu_tec | cond_tec | bucle_for_tec | mientras_tec)* EOF;

condicion: IF PARENTESIS (IDENT | VAR_USU) PARENTESIS LLAVES asignacion LLAVES;
cond_tec:  IF PARENTESIS (IDENT | VAR_USU) PARENTESIS LLAVES asignac_tec LLAVES;

bucle_for : FOR PARENTESIS (IDENT | VAR_USU) OPERADOR NUMERO TO NUMERO PARENTESIS LLAVES asignacion LLAVES;
bucle_for_tec : FOR PARENTESIS (IDENT | VAR_USU) OPERADOR NUMERO TO NUMERO PARENTESIS LLAVES asignac_tec LLAVES;

mientras : WHILE PARENTESIS (IDENT | VAR_USU) OPERADOR NUMERO PARENTESIS LLAVES asignacion LLAVES;
mientras_tec : WHILE PARENTESIS (IDENT | VAR_USU) OPERADOR NUMERO PARENTESIS LLAVES asignac_tec LLAVES;

asignacion : IDENT OPERADOR tipo SEPARADOR;
asignac_tec : IDENT OPERADOR tipo;

var_usuario : SET VAR_USU OPERADOR tipo SEPARADOR;
var_usu_tec : SET VAR_USU OPERADOR tipo;

tipo : NUMERO | BOOLEANO | RUTA | CADENA;

